/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package kivuli.visao;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Shape;
import java.awt.geom.Line2D;
import java.io.Serializable;
import java.util.List;
import javax.swing.JLabel;
import kivuli.entidade.Arvore;
import kivuli.entidade.Casa;
import kivuli.entidade.Figura;
import kivuli.entidade.Muro;
import kivuli.entidade.Poste;
import kivuli.entidade.Predio;
import kivuli.entidade.Projeto;
import kivuli.visao.dialog.DialogArvore;
import kivuli.visao.dialog.DialogCasa;
import kivuli.visao.dialog.DialogMuro;
import kivuli.visao.dialog.DialogPoste;
import kivuli.visao.dialog.DialogPredio;
import kivuli.visao.item.ItemArvore;
import kivuli.visao.item.ItemCasa;
import kivuli.visao.item.ItemDeDesenho;
import kivuli.visao.item.ItemMuro;
import kivuli.visao.item.ItemPoste;
import kivuli.visao.item.ItemPredio;

/**
 *
 * @author bpmlab
 */
public class AreaDesenho extends javax.swing.JPanel implements Serializable {

    private static int countProjeto = 1;
    private final FramePrincipal framePrincipal;
    private JLabel mousePosicao;
    private Projeto projeto;

    /**
     *
     * @param framePrincipal
     */
    public AreaDesenho(FramePrincipal framePrincipal) {
        this.framePrincipal = framePrincipal;
        initComponents();
    }

    public boolean removerItemDeDesenho(ItemDeDesenho item) {
        List<Figura> figuras = projeto.getFiguras();
        this.remove(item);
        return figuras.remove(item.getFigura());
    }

    private void paintBackgound(Graphics2D g2d) {
        g2d.setPaint(Color.LIGHT_GRAY);
        for (int i = 0; i < this.getWidth(); i += projeto.getEscala()) {
            Shape line = new Line2D.Float(i, 0, i, this.getHeight());
            g2d.draw(line);
        }

        for (int i = 0; i < this.getHeight(); i += projeto.getEscala()) {
            Shape line = new Line2D.Float(0, i, this.getWidth(), i);
            g2d.draw(line);
        }
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2d = (Graphics2D) g.create();
        paintBackgound(g2d);
        g2d.dispose();
    }

    public static int getCountProjeto() {
        return countProjeto++;
    }

    public JLabel getMousePosicao() {
        return mousePosicao;
    }

    public void setMousePosicao(JLabel mousePosicao) {
        this.mousePosicao = mousePosicao;
    }

    public Projeto getProjeto() {
        return projeto;
    }

    public void setProjeto(Projeto projeto) {
        this.projeto = projeto;
    }

    public FramePrincipal getFramePrincipal() {
        return framePrincipal;
    }

    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        setBackground(new java.awt.Color(255, 255, 255));
        addMouseMotionListener(new java.awt.event.MouseMotionAdapter() {
            public void mouseDragged(java.awt.event.MouseEvent evt) {
                formMouseDragged(evt);
            }
            public void mouseMoved(java.awt.event.MouseEvent evt) {
                formMouseMoved(evt);
            }
        });
        addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                formMouseClicked(evt);
            }
        });
        setLayout(null);
    }// </editor-fold>//GEN-END:initComponents

    private void formMouseMoved(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_formMouseMoved
        this.mousePosicao.setText("X:" + evt.getX() + " Y:" + evt.getY());
    }//GEN-LAST:event_formMouseMoved

    private void formMouseDragged(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_formMouseDragged
        this.mousePosicao.setText("X:" + evt.getX() + " Y:" + evt.getY());
    }//GEN-LAST:event_formMouseDragged

    private void formMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_formMouseClicked
        //<editor-fold defaultstate="collapsed" desc="NÃO FAÇA ISSO EM CASA É FEIO">
        String botaoSelecionado = framePrincipal.getGrupoDeFerramentas().
                getSelection().getActionCommand();

        switch (botaoSelecionado) {
            case "ARVORE":
                DialogArvore dialogArvore = new DialogArvore(framePrincipal, new Arvore());
                Arvore arvore = dialogArvore.getArvore();
                if (dialogArvore.isOk()) {
                    arvore.setX(evt.getX());
                    arvore.setY(evt.getY());
                    add(new ItemArvore(arvore));
                    projeto.getFiguras().add(arvore);
                }
                break;
            case "POSTE":
                DialogPoste dialogPoste = new DialogPoste(framePrincipal, new Poste());
                Poste poste = dialogPoste.getPoste();
                if (dialogPoste.isOk()) {
                    poste.setX(evt.getX());
                    poste.setY(evt.getY());
                    add(new ItemPoste(poste));
                    projeto.getFiguras().add(poste);
                }
                break;
            case "MURO":
                DialogMuro dialogMuro = new DialogMuro(framePrincipal, new Muro());
                Muro muro = dialogMuro.getMuro();
                if (dialogMuro.isOk()) {
                    muro.setX(evt.getX());
                    muro.setY(evt.getY());
                    add(new ItemMuro(muro));
                    projeto.getFiguras().add(muro);
                }
                break;
            case "PREDIO":
                DialogPredio dialogPredio = new DialogPredio(framePrincipal, new Predio());
                Predio predio = dialogPredio.getPredio();
                if (dialogPredio.isOk()) {
                    predio.setX(evt.getX());
                    predio.setY(evt.getY());
                    add(new ItemPredio(predio));
                    projeto.getFiguras().add(predio);
                }
                break;
            case "CASA":
                DialogCasa dialogCasa = new DialogCasa(framePrincipal, new Casa());
                Casa casa = dialogCasa.getCasa();
                if (dialogCasa.isOk()) {
                    casa.setX(evt.getX());
                    casa.setY(evt.getY());
                    add(new ItemCasa(casa));
                    projeto.getFiguras().add(casa);
                }
                break;
        }
        framePrincipal.getGrupoDeFerramentas().clearSelection();
        repaint();
        //</editor-fold>
    }//GEN-LAST:event_formMouseClicked


    // Variables declaration - do not modify//GEN-BEGIN:variables
    // End of variables declaration//GEN-END:variables
}
